简介

IIC(Inter-Integrated Circuit)总线是一种由 PHILIPS 公司开发的两线式串行总线,用于连接
微控制器及其外围设备。它是由数据线 SDA 和时钟 SCL 构成的串行总线,可发送和接收数据。
在 CPU 与被控 IC 之间、 IC与IC之间进行双向传送, 高速IIC总线一般可达 400kbps 以上。

I2C 总线在传送数据过程中共有三种类型信号, 它们分别是:开始信号、结束信号和应答信号。

开始信号:SCL 为高电平时, SDA 由高电平向低电平跳变,开始传送数据。

结束信号:SCL 为高电平时, SDA 由低电平向高电平跳变,结束传送数据。

应答信号:接收数据的 IC 在接收到 8bit 数据后,向发送数据的 IC 发出特定的低电平脉冲,表示已收到数据。 CPU 向受控单元发出一个信号后,等待受控单元发出一个应答信号, CPU 接收到应答信号后,根据实际情况作出是否继续传递信号的判断。若未收到应答信号,由判断为受控单元出现故障。

物理层

1)它只使用两条总线线路:一条双向串行数据线(SDA) ,一条串行时钟线 (SCL)。

2)每个连接到总线的设备都有一个独立的地址,主机可以利用这个地址进行不同设备之间的访问。

3)多主机同时使用总线时,为了防止数据冲突,会利用仲裁方式决定由哪个设备占用总线。

4)具有三种传输模式 :标准模式的传 输速率为 100 Kbit/s ,快速模式为 400 Kbit/s ,高速模式下可达 3.4 Mbit/s,但目前大多 I 2 C 设备尚不支持高速模式。

5)片上的滤波器可以滤去总线数据线上的毛刺波以保证数据完整。

6)连接到相同总线的 IC 数量受到总线的最大电容 400 pF 限制。

协议层

IIC 的协议包括起始和停止条件、数据有效性、响应、仲裁、时钟同步和地址广播等环节,由于我们使用的是 STM32 集成的硬件 IIC 接口,并不需要用软件去模拟 SDA 和SCL 线的时序,所以我们直接以 IIC 通信的流程为大家讲解。

由主机的 IIC 接口产生的传输起始信号,这时连接到 IIC 总线上的所有从机都会接收到这个信号。起始信号产生后,所有从机就开始等待主机紧接下来广播的从机地址信号(SLAVE_ADDRESS),在 IIC 总线上,每个设备的地址都是唯一的。当主机广播的地址与某个设备地址相同时,这个设备就被选中了,没被选中的设备将会忽略之后的数据信号。根据 IIC 协议,这个从机地址可以是 7 位或 10 位。

在地址位之后,是传输方向的选择位,该位为 0 时,表示后面的数据传输方向是由主
机传输至从机。该位为 1 时,则相反。从机接收到匹配的地址后,主机或从机会返回一个应答或非应答信号,只有接收到应答信号后,主机才能继续发送或接收数据。

若配置的方向传输位为写数据,广播完地址,接收到应答信号后,主机开始正式向从机传输数据(DATA),数据包的大小为 8 位。主机每发送完一个数据,都要等待从机的应答信号(A),重复这个过程,可以向从机传输 N 个数据,这个 N 没有大小限制。当数据传输结束时,主机向从机发送一个停止传输信号(P),表示不再传输数据。

若配置的方向传输位为读数据,广播完地址,接收到应答信号后,从机开始向主机返回数据,数据包大小也为 8 位。从机每发送完一个数据,都会等待主机的应答信号,重复这个过程,可以返回 N 个数据,这个 N 也没有大小限制。当主机希望停止接收数据时,就向从机返回一个非应答信号,则从机自动停止数据传输。

STM32的 IIC 特性

1)STM32 的中等容量和大容量型号的芯片均有多达两个的 I 2 C 总线接口。
2)能够工作于多主模式或从模式,分别为主接收器、主发送器、从接收器及从发送器。
3)支持标准模式 100 Kbit/s 和快 速模式 400 Kbit/s,不支持高速模式。
4)支持 7 位或 10 位寻址。
5)内置了硬件 CRC 发生器 / 校验器。
6)I 2 C 的接收和发送都可以使用 DMA 操作。
7)支持系统管理总线(SMBus)2.0 版。

IIC 架构

SCL 线的时序即为 I 2 C 协议中的时钟信号,它由 I 2 C 接口根据时钟控制寄存器
(CCR)控制,控制的参数主要为时钟频率。
而 SDA 线的信号则通过一系列数据控制架构,在将要发送的数据的基础上,根据协议
添加各种起始信号、应答信号、地址信号,实现以 I 2 C 协议的方式发送出去。读取数据时
则从 SDA 线上的信号中取出接收到的数据值。发送和接收的数据都被保存在数据寄存器
(DR)上